package com.whfc.common.util;

/**
 * @Description: 风向计算工具
 * @author: xugcheng
 * @version: 1.0
 * @date: 2021-01-27 15:35
 */
public class WindUtil {

    /**
     * 风向转换角度
     * 按顺时针角度,0-正北 90-正东 180-正南 270-正西
     *
     * @param angle
     * @return
     */
    public static int angle2WindDirection(long angle) {
        //正北:0x000F
        //东北偏北:0x0000
        //东北:0x0001
        //东北偏东:0x0002
        //正东:0x0003
        //东南偏东:0x0004
        //东南:0x0005
        //东南偏南: 0x0006
        //正南:0x0007
        //西南偏南:0x0008
        //西南:0x0009
        //西南偏西:0x000A
        //正西:0x000B
        //西北偏西:0x000C
        //西北:0x000D
        //西北偏北:0x000E


        //正北
        if ((angle >= 0 && angle <= 11.25) ||
                (angle >= 348.76 && angle <= 360)) {
            return 15;
        }
        //东北偏北
        else if (angle >= 11.26 && angle <= 33.75) {
            return 0;
        }
        //东北
        else if (angle >= 33.76 && angle <= 56.25) {
            return 1;
        }
        //东北偏东
        else if (angle >= 56.36 && angle <= 78.75) {
            return 2;
        }
        //正东
        else if (angle >= 78.76 && angle <= 101.25) {
            return 3;
        }
        //东南偏东
        else if (angle >= 101.26 && angle <= 123.75) {
            return 4;
        }
        //东南
        else if (angle >= 123.76 && angle <= 146.25) {
            return 5;
        }
        //东南偏东
        else if (angle >= 146.26 && angle <= 168.75) {
            return 6;
        }
        //正南
        else if (angle >= 168.76 && angle <= 191.25) {
            return 7;
        }
        //西南偏南
        else if (angle >= 191.26 && angle <= 213.75) {
            return 8;
        }
        //西南
        else if (angle >= 213.76 && angle <= 236.25) {
            return 9;
        }
        //西南偏西
        else if (angle >= 236.26 && angle <= 258.75) {
            return 10;
        }
        //正西
        else if (angle >= 258.76 && angle <= 281.25) {
            return 11;
        }
        //西北偏西
        else if (angle >= 281.26 && angle <= 303.75) {
            return 12;
        }
        //西北
        else if (angle >= 303.76 && angle <= 326.25) {
            return 13;
        }
        //西北偏北
        else if (angle >= 326.26 && angle <= 348.75) {
            return 14;
        }
        return 0;
    }

    /**
     * 风向转换角度
     * 按顺时针角度,0-正北 90-正东 180-正南 270-正西
     *
     * @param angle
     * @return
     */
    public static int angle2WindDirection(Double angle) {
        //正北
        if ((angle >= 0 && angle <= 11.25) ||
                (angle >= 348.76 && angle <= 360)) {
            return 15;
        }
        //东北偏北
        else if (angle >= 11.26 && angle <= 33.75) {
            return 0;
        }
        //东北
        else if (angle >= 33.76 && angle <= 56.25) {
            return 1;
        }
        //东北偏东
        else if (angle >= 56.36 && angle <= 78.75) {
            return 2;
        }
        //正东
        else if (angle >= 78.76 && angle <= 101.25) {
            return 3;
        }
        //东南偏东
        else if (angle >= 101.26 && angle <= 123.75) {
            return 4;
        }
        //东南
        else if (angle >= 123.76 && angle <= 146.25) {
            return 5;
        }
        //东南偏东
        else if (angle >= 146.26 && angle <= 168.75) {
            return 6;
        }
        //正南
        else if (angle >= 168.76 && angle <= 191.25) {
            return 7;
        }
        //西南偏南
        else if (angle >= 191.26 && angle <= 213.75) {
            return 8;
        }
        //西南
        else if (angle >= 213.76 && angle <= 236.25) {
            return 9;
        }
        //西南偏西
        else if (angle >= 236.26 && angle <= 258.75) {
            return 10;
        }
        //正西
        else if (angle >= 258.76 && angle <= 281.25) {
            return 11;
        }
        //西北偏西
        else if (angle >= 281.26 && angle <= 303.75) {
            return 12;
        }
        //西北
        else if (angle >= 303.76 && angle <= 326.25) {
            return 13;
        }
        //西北偏北
        else if (angle >= 326.26 && angle <= 348.75) {
            return 14;
        }
        return 0;
    }
}
